package org.darcy.service;

import java.util.Date;
import java.util.List;
import java.util.Map;

import org.darcy.entity.BizArticle;
import org.darcy.framework.generic.GenericService;
import org.darcy.model.BizArticleModel;
import org.springframework.web.multipart.MultipartFile;

import com.baomidou.mybatisplus.core.metadata.IPage;

/**
 * 文章列表
 */
public interface BizArticleService extends GenericService<BizArticle> {

	/**
	 * 文章详情
	 */
	BizArticleModel getDetail(Long id);

	/**
	 * 分页查询
	 *
	 * @param vo
	 * @return
	 */
	IPage<BizArticleModel> query(BizArticleModel param);

	/**
	 * 站长推荐
	 *
	 * @param pageSize
	 * @return
	 */
	List<BizArticleModel> listRecommended(int pageSize);

	/**
	 * 近期文章
	 *
	 * @param pageSize
	 * @return
	 */
	List<BizArticleModel> listRecent(int pageSize);

	/**
	 * 随机文章
	 *
	 * @param pageSize
	 * @return
	 */
	List<BizArticleModel> listRandom(int pageSize);

	/**
	 * 获取热门文章
	 *
	 * @return
	 */
	List<BizArticleModel> listHotArticle(int pageSize);

	/**
	 * 根据某篇文章获取与该文章相关的文章
	 *
	 * @return
	 */
	List<BizArticleModel> listRelatedArticle(int pageSize, BizArticleModel article);

	/**
	 * 获取上一篇和下一篇
	 *
	 * @param insertTime
	 * @return
	 */
	Map<String, BizArticleModel> getPrevAndNextArticles(Date insertTime);

	/**
	 * 文章点赞
	 *
	 * @param id
	 */
	void doPraise(Long id);

	/**
	 * 是否存在文章
	 *
	 * @param id
	 * @return
	 */
	boolean isExist(Long id);

	/**
	 * 发布文章 a
	 *
	 * @param article
	 * @param tags
	 * @param file
	 * @return
	 */
	boolean publish(BizArticle article, Long[] tags, MultipartFile file);

	/**
	 * 修改置顶、推荐
	 *
	 * @return
	 */
	boolean updateTopOrRecommendedById(String type, Long id);

	/**
	 * 批量修改状态
	 *
	 * @param ids
	 * @param status
	 */
	void batchUpdateStatus(Long[] ids, boolean status);

}
